{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "5b11a196-ac20-4f53-802e-71327f8aa192",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np \n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f7d84011-becd-4b21-83eb-37c67ae8e5d4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'1.26.3'"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "6a30161a-2454-43d9-b933-e55db9b5d716",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 回归任务，有监督机器学习\n",
    "X = 2*np.random.rand(100,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "9ac5ee0c-c82e-43ba-a36c-d9ce3329a843",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.19141534]\n",
      " [1.38717593]\n",
      " [1.01738899]\n",
      " [1.6091435 ]\n",
      " [1.25187039]\n",
      " [0.47603576]\n",
      " [1.10932471]\n",
      " [1.55013476]\n",
      " [0.88404103]\n",
      " [0.29216426]\n",
      " [0.39899941]\n",
      " [1.23268298]\n",
      " [1.68061918]\n",
      " [1.20185464]\n",
      " [0.35926042]\n",
      " [1.78144905]\n",
      " [1.47304345]\n",
      " [1.7279368 ]\n",
      " [1.50971476]\n",
      " [0.64505477]\n",
      " [1.26617129]\n",
      " [0.048791  ]\n",
      " [1.39231461]\n",
      " [1.73102307]\n",
      " [0.21979421]\n",
      " [1.02212688]\n",
      " [1.02965793]\n",
      " [0.21630552]\n",
      " [0.39496615]\n",
      " [0.58609796]\n",
      " [0.28073672]\n",
      " [0.8275624 ]\n",
      " [0.30796923]\n",
      " [0.9142783 ]\n",
      " [1.11348718]\n",
      " [0.15285806]\n",
      " [1.71883012]\n",
      " [0.30072505]\n",
      " [1.37662441]\n",
      " [0.18896227]\n",
      " [0.90904797]\n",
      " [0.8565298 ]\n",
      " [1.15317002]\n",
      " [1.00771808]\n",
      " [1.78089564]\n",
      " [1.60937086]\n",
      " [1.20803854]\n",
      " [1.05297217]\n",
      " [1.43896883]\n",
      " [1.34882357]\n",
      " [1.78635149]\n",
      " [1.58792951]\n",
      " [0.24275224]\n",
      " [1.28424057]\n",
      " [0.49019408]\n",
      " [1.84057583]\n",
      " [1.28561658]\n",
      " [0.75891991]\n",
      " [0.94380439]\n",
      " [1.52593885]\n",
      " [0.22505147]\n",
      " [0.60983778]\n",
      " [0.75667871]\n",
      " [0.68497293]\n",
      " [1.59199251]\n",
      " [0.7062808 ]\n",
      " [0.51878492]\n",
      " [1.62725719]\n",
      " [1.02100117]\n",
      " [1.71708929]\n",
      " [0.49206569]\n",
      " [0.34497842]\n",
      " [1.75876642]\n",
      " [0.4315772 ]\n",
      " [1.73855636]\n",
      " [1.27291388]\n",
      " [0.37341746]\n",
      " [0.50757384]\n",
      " [1.19023331]\n",
      " [1.5703946 ]\n",
      " [1.5482367 ]\n",
      " [0.31136955]\n",
      " [1.39896512]\n",
      " [1.43617923]\n",
      " [1.23592973]\n",
      " [1.19806237]\n",
      " [1.08380655]\n",
      " [1.65417267]\n",
      " [1.29978935]\n",
      " [0.81643393]\n",
      " [0.79359716]\n",
      " [1.40242595]\n",
      " [0.27675764]\n",
      " [1.8479128 ]\n",
      " [0.70778147]\n",
      " [0.51948529]\n",
      " [1.72658642]\n",
      " [0.1958786 ]\n",
      " [0.30800577]\n",
      " [1.33773829]]\n"
     ]
    }
   ],
   "source": [
    "print(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "03060f26-5ff0-4c2f-9041-9c5464c5addd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100\n"
     ]
    }
   ],
   "source": [
    "print(len(X))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "d8445429-7ccd-42bb-9a92-e976de228f0d",
   "metadata": {},
   "outputs": [],
   "source": [
    "Y = 5 + 4*X + np.random.randn(100,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "ebb6a273-17a6-4ecd-9141-dc0d824dcc70",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 4.65243434]\n",
      " [ 9.9480358 ]\n",
      " [ 9.98302163]\n",
      " [ 9.70063305]\n",
      " [ 9.98455488]\n",
      " [ 6.35227514]\n",
      " [ 9.81224932]\n",
      " [10.98857563]\n",
      " [ 7.19347025]\n",
      " [ 7.16979232]\n",
      " [ 7.07260374]\n",
      " [10.19816715]\n",
      " [12.61225494]\n",
      " [ 8.93604604]\n",
      " [ 6.33579791]\n",
      " [11.01217509]\n",
      " [10.06138187]\n",
      " [11.01714053]\n",
      " [11.27384178]\n",
      " [ 8.93658895]\n",
      " [ 9.54700598]\n",
      " [ 5.45102527]\n",
      " [11.89488831]\n",
      " [12.95201542]\n",
      " [ 6.77809076]\n",
      " [ 9.90824207]\n",
      " [10.69316556]\n",
      " [ 5.18258206]\n",
      " [ 7.85228531]\n",
      " [ 5.57015507]\n",
      " [ 5.56579804]\n",
      " [ 7.49830776]\n",
      " [ 7.5334434 ]\n",
      " [ 8.7192016 ]\n",
      " [11.62468469]\n",
      " [ 6.16517008]\n",
      " [12.07867757]\n",
      " [ 5.975801  ]\n",
      " [10.09568185]\n",
      " [ 5.8991142 ]\n",
      " [ 8.00285316]\n",
      " [ 8.0241952 ]\n",
      " [ 9.51126616]\n",
      " [ 9.11508414]\n",
      " [11.0315968 ]\n",
      " [10.39216682]\n",
      " [10.33096451]\n",
      " [ 9.27219461]\n",
      " [10.89654581]\n",
      " [10.28197885]\n",
      " [11.25228324]\n",
      " [11.0953895 ]\n",
      " [ 8.24555264]\n",
      " [ 9.25685217]\n",
      " [ 6.2389621 ]\n",
      " [13.1180972 ]\n",
      " [ 9.93771998]\n",
      " [ 6.36551596]\n",
      " [ 8.3487569 ]\n",
      " [12.06279729]\n",
      " [ 5.10091471]\n",
      " [ 7.17230656]\n",
      " [ 7.41339986]\n",
      " [ 6.25780935]\n",
      " [11.07342091]\n",
      " [ 7.59983275]\n",
      " [ 7.57736137]\n",
      " [11.70565047]\n",
      " [10.65351122]\n",
      " [11.88472955]\n",
      " [ 6.85741571]\n",
      " [ 5.85316862]\n",
      " [10.69841492]\n",
      " [ 7.95422357]\n",
      " [13.79260843]\n",
      " [10.66061894]\n",
      " [ 6.12253982]\n",
      " [ 7.08644461]\n",
      " [ 8.77032114]\n",
      " [ 9.99244675]\n",
      " [10.56764937]\n",
      " [ 5.16048043]\n",
      " [10.17874922]\n",
      " [10.2640054 ]\n",
      " [ 9.42303909]\n",
      " [11.84669141]\n",
      " [ 9.00206875]\n",
      " [12.32085593]\n",
      " [10.94752474]\n",
      " [ 7.8830301 ]\n",
      " [ 7.65743976]\n",
      " [ 8.62006503]\n",
      " [ 6.68604048]\n",
      " [11.19179856]\n",
      " [ 7.68217526]\n",
      " [ 7.9399028 ]\n",
      " [13.25738616]\n",
      " [ 5.71576768]\n",
      " [ 7.18989407]\n",
      " [ 8.46376936]]\n"
     ]
    }
   ],
   "source": [
    "print(Y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "45ff6ab0-9705-490f-8c2d-7cd1805a575f",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_b = np.c_[np.ones((100,1)),X]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "4662707f-ec62-48cf-bc26-a2c39be4a797",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1.        , 0.19141534],\n",
       "       [1.        , 1.38717593],\n",
       "       [1.        , 1.01738899],\n",
       "       [1.        , 1.6091435 ],\n",
       "       [1.        , 1.25187039],\n",
       "       [1.        , 0.47603576],\n",
       "       [1.        , 1.10932471],\n",
       "       [1.        , 1.55013476],\n",
       "       [1.        , 0.88404103],\n",
       "       [1.        , 0.29216426],\n",
       "       [1.        , 0.39899941],\n",
       "       [1.        , 1.23268298],\n",
       "       [1.        , 1.68061918],\n",
       "       [1.        , 1.20185464],\n",
       "       [1.        , 0.35926042],\n",
       "       [1.        , 1.78144905],\n",
       "       [1.        , 1.47304345],\n",
       "       [1.        , 1.7279368 ],\n",
       "       [1.        , 1.50971476],\n",
       "       [1.        , 0.64505477],\n",
       "       [1.        , 1.26617129],\n",
       "       [1.        , 0.048791  ],\n",
       "       [1.        , 1.39231461],\n",
       "       [1.        , 1.73102307],\n",
       "       [1.        , 0.21979421],\n",
       "       [1.        , 1.02212688],\n",
       "       [1.        , 1.02965793],\n",
       "       [1.        , 0.21630552],\n",
       "       [1.        , 0.39496615],\n",
       "       [1.        , 0.58609796],\n",
       "       [1.        , 0.28073672],\n",
       "       [1.        , 0.8275624 ],\n",
       "       [1.        , 0.30796923],\n",
       "       [1.        , 0.9142783 ],\n",
       "       [1.        , 1.11348718],\n",
       "       [1.        , 0.15285806],\n",
       "       [1.        , 1.71883012],\n",
       "       [1.        , 0.30072505],\n",
       "       [1.        , 1.37662441],\n",
       "       [1.        , 0.18896227],\n",
       "       [1.        , 0.90904797],\n",
       "       [1.        , 0.8565298 ],\n",
       "       [1.        , 1.15317002],\n",
       "       [1.        , 1.00771808],\n",
       "       [1.        , 1.78089564],\n",
       "       [1.        , 1.60937086],\n",
       "       [1.        , 1.20803854],\n",
       "       [1.        , 1.05297217],\n",
       "       [1.        , 1.43896883],\n",
       "       [1.        , 1.34882357],\n",
       "       [1.        , 1.78635149],\n",
       "       [1.        , 1.58792951],\n",
       "       [1.        , 0.24275224],\n",
       "       [1.        , 1.28424057],\n",
       "       [1.        , 0.49019408],\n",
       "       [1.        , 1.84057583],\n",
       "       [1.        , 1.28561658],\n",
       "       [1.        , 0.75891991],\n",
       "       [1.        , 0.94380439],\n",
       "       [1.        , 1.52593885],\n",
       "       [1.        , 0.22505147],\n",
       "       [1.        , 0.60983778],\n",
       "       [1.        , 0.75667871],\n",
       "       [1.        , 0.68497293],\n",
       "       [1.        , 1.59199251],\n",
       "       [1.        , 0.7062808 ],\n",
       "       [1.        , 0.51878492],\n",
       "       [1.        , 1.62725719],\n",
       "       [1.        , 1.02100117],\n",
       "       [1.        , 1.71708929],\n",
       "       [1.        , 0.49206569],\n",
       "       [1.        , 0.34497842],\n",
       "       [1.        , 1.75876642],\n",
       "       [1.        , 0.4315772 ],\n",
       "       [1.        , 1.73855636],\n",
       "       [1.        , 1.27291388],\n",
       "       [1.        , 0.37341746],\n",
       "       [1.        , 0.50757384],\n",
       "       [1.        , 1.19023331],\n",
       "       [1.        , 1.5703946 ],\n",
       "       [1.        , 1.5482367 ],\n",
       "       [1.        , 0.31136955],\n",
       "       [1.        , 1.39896512],\n",
       "       [1.        , 1.43617923],\n",
       "       [1.        , 1.23592973],\n",
       "       [1.        , 1.19806237],\n",
       "       [1.        , 1.08380655],\n",
       "       [1.        , 1.65417267],\n",
       "       [1.        , 1.29978935],\n",
       "       [1.        , 0.81643393],\n",
       "       [1.        , 0.79359716],\n",
       "       [1.        , 1.40242595],\n",
       "       [1.        , 0.27675764],\n",
       "       [1.        , 1.8479128 ],\n",
       "       [1.        , 0.70778147],\n",
       "       [1.        , 0.51948529],\n",
       "       [1.        , 1.72658642],\n",
       "       [1.        , 0.1958786 ],\n",
       "       [1.        , 0.30800577],\n",
       "       [1.        , 1.33773829]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "a8be5e25-5c19-4d2b-bcb0-c3ad5a51b9c3",
   "metadata": {},
   "outputs": [],
   "source": [
    "θ = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(Y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "5f24b09e-2e73-4bee-be67-8f53dda798f3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[5.15296069]\n",
      " [3.79312768]]\n"
     ]
    }
   ],
   "source": [
    "print(θ)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "30602fa5-00ca-4485-b51c-a2cfc36cdc3b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用模型继续预测\n",
    "X_new = np.array([[0],[2]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "69738804-b019-457f-9879-7311ffed28ef",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0],\n",
       "       [2]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_new"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "1adbe383-0161-4817-8770-38b68b6e6fa0",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_new_b = np.c_[np.ones((2,1)),X_new]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "21b059cf-0f60-4e06-9857-51d9849641b9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1. 0.]\n",
      " [1. 2.]]\n"
     ]
    }
   ],
   "source": [
    "print(X_new_b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "5e6ef062-32a6-451a-be98-26c3d16c8229",
   "metadata": {},
   "outputs": [],
   "source": [
    "Y_predict = X_new_b.dot(θ)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "6c3bfa26-b57a-4f15-80b6-78ad053912ca",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 5.15296069],\n",
       "       [12.73921606]])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y_predict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "b3ac77ab-81da-45f3-8e31-c47817e7008d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<function matplotlib.pyplot.show(close=None, block=None)>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(X_new,Y_predict,'r-')\n",
    "plt.plot(X,Y,'b.')\n",
    "plt.show"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d4cc5b85-2d5c-4f4d-a5aa-38fdb998e52f",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
